The following background discussion sets forth the inventors' own knowledge of certain technologies and problems associated therewith. Accordingly, this discussion is not an admission of prior art, and it is not an admission of the knowledge available to a person of ordinary skill in the art.
As production geometries of processor systems with their associated memories decrease, the opportunities for defects in the finished products increase. These defects, along with other physical events (e.g., cosmic ray passage), can result in increasing bit error rates in system memories. Along with increasing single bit error rates are the increasing probability of double bit errors in a given area of memory.
Today's high density memories may be subject to increased incidents of bit errors than lower density memories. Process technologies used to manufacture high density memories can result in defects that cause persistent weak bits. Further, multiple neighboring bits may be subject to these defects due to processing. In addition, transient bit errors can affect multiple neighboring bits in high-density memories.
Single bit error correction methods have been used to correct occurrences of errors in a single bit of an area of memory. Single bit error correction methods, such as Hamming code methods, are attractive because they may be performed in a manner that has a minimal impact on memory latency (e.g., in a single clock cycle). But single bit error correction methods cannot correct both a transient bit error and a persistent weak bit error occurring in the same area of memory. In a circumstance where a region of memory has a double bit (or higher) error, and only single bit error correction is used, that region of memory will require reloading from a data source to correct the error. Such reloading increases memory latency due to cycles spent requesting, reading, and loading the data from the source to the region of memory.
To resolve issues related to double bit errors, polynomial code based error correction codes (ECCs) or methods, such as the Bose-Chaudhuri-Hocquenghem (BCH) code, may be used. These double bit error correction methods have an advantage over single bit error correction methods in that they can significantly improve memory reliability. For example, double bit error correction methods can correct both a transient bit error and a persistent weak bit error in a same area of memory. While double bit error correction methods are robust, the process of determining the location of the errors and correcting the errors are non-trivial and can result in significantly longer memory latencies than those found in single bit error correction methods. Thus, traditionally, a tradeoff has been required between memory latency and memory reliability through correction of higher numbers of bit errors.
In non-volatile memories, failures increase with aging. For example, as flash memory is reprogrammed over a number of cycles, correction of higher numbers of bit errors requires more correction capability with a corresponding increase in the number of parity bits. If the number of bits allocated for parity increases, however, the number of bits available for storing data is reduced.